/*
 * Author  : Leo <lipf160627@163.com>
 * Created : 2025-7-27
 * Desc    : Ultrasonie driver
 */

#pragma once

#include "driver/gpio.h"
#include "esp_timer.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

class Ultrasonic {
public:
    Ultrasonic(gpio_num_t pinTrig, gpio_num_t pinEcho);
    ~Ultrasonic();

    float measureDistanceCM();  // 测量距离（厘米）

private:
    gpio_num_t m_pinTrig;
    gpio_num_t m_pinEcho;
    uint64_t   m_timeoutUs;

    portMUX_TYPE m_spinlock;    // 自旋锁，用于测距时禁止调度

    bool init();                // 初始化
    void delayUs(uint32_t us);  // 微秒延迟
    uint64_t pulseIn();         // 测量脉冲宽度
};
